package com.jay.model;

import com.jay.constant.RpcConstant;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * RPC 请求
 * 该类用于封装RPC调用的所有必要信息，包括服务名称、方法名称、服务版本、参数类型列表和参数列表
 * 通过实现Serializable接口，确保该对象可以被序列化，以便在网络中传输
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class RpcRequest implements Serializable {

    /**
     * 服务名称
     * 用于指定需要调用的服务的唯一名称
     */
    private String serviceName;

    /**
     * 方法名称
     * 用于指定在服务中需要调用的具体方法的名称
     */
    private String methodName;

    /**
     * 服务版本
     * 用于指定需要调用的服务的版本，默认值为RpcConstant.DEFAULT_SERVICE_VERSION
     * 服务版本允许在同一个服务的不同版本之间进行区分和调用
     */
    private String serviceVersion = RpcConstant.DEFAULT_SERVICE_VERSION;

    /**
     * 参数类型列表
     * 包含了方法参数的所有类型，用于在调用服务方法时确定每个参数的类型
     */
    private Class<?>[] parameterTypes;

    /**
     * 参数列表
     * 包含了方法的所有参数值，与parameterTypes数组配合使用，确保每个参数值与参数类型匹配
     */
    private Object[] args;

}

